package com.hnkywl.sts.service.jsgl;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.hnkywl.sts.dao.jsgl.ZjbcdDao;
import com.hnkywl.sts.dao.jsgl.ZjbcdRzDao;
import com.hnkywl.sts.dao.xsgl.KhDao;
import com.hnkywl.sts.entity.cggl.Zjbcd;
import com.hnkywl.sts.entity.cggl.ZjbcdRz;
import com.hnkywl.sts.entity.xsgl.Kh;
import com.hnkywl.sts.service.sys.YgService;
import net.ruixin.orm.hibernate.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: jerry
 * Date: 13-6-8
 * Time: 上午1:07
 * To change this template use File | Settings | File Templates.
 */
@Service
public class ZjbcdService {
    private ZjbcdDao zjbcdDao;

    private ZjbcdRzDao zjbcdRzDao;

    private KhDao khDao;

    @Transactional
    public String findZjbcdSearch(Long cgjsdId, int pageNo, int pageSize) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        Page zjbcdPage = this.zjbcdDao.findZjbcdSearch(cgjsdId, pageNo, pageSize);
        String zjbcdJson = gson.toJson(zjbcdPage.getResult());
        return "{\"total\":" + zjbcdPage.getTotalCount() + ",\"rows\":" + zjbcdJson + "}";
    }

    @Transactional
    public String findCgjsddmxSearch(Long cgjsdId) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        String result = "";
        Double je = 0d;
        List<Map> cgdmxList = this.zjbcdDao.findCgjddmxSearch(cgjsdId);
        if (cgdmxList.size() > 0) {
            for (Map map : cgdmxList) {
                je += map.get("je") == null ? 0d : Double.parseDouble(map.get("je").toString());
            }
            result = "{\"rows\":" + gson.toJson(cgdmxList) + ",\"footer\":[{\"wzgg.code\":\"合计:\",\"je\":" + je
                    + "}]}";
        } else {
            result = "{\"rows\":" + gson.toJson(cgdmxList) + "}";
        }
        return result;
    }


    @Transactional
    public String findZjbcdList(String wzbm, String wzmc, Long gysId, Long sbgsId, Long sbbmId, Long sbrId, int pageNo, int pageSize) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        Page zjbcdPage = this.zjbcdDao.findZjbcdList(wzbm, wzmc, gysId, sbgsId, sbbmId, sbrId, pageNo, pageSize);
        List<Map> sumList = this.zjbcdDao.findSumZjbcd(wzbm, wzmc, gysId, sbgsId, sbbmId, sbrId);
        String zjbcdJson = gson.toJson(zjbcdPage.getResult());
        Double je = 0d;
        if (sumList.size() != 0) {
            for (Map map : sumList) {
                je += Double.valueOf((map.get("je") == null ? 0d : map.get("je")).toString());
            }
            return "{\"total\":" + zjbcdPage.getTotalCount() + ",\"rows\":" + zjbcdJson + ",\"footer\":[{\"lb.z\":\"合计:\",\"je\":" + je + " }]}";
        } else {
            return "{\"total\":" + zjbcdPage.getTotalCount() + ",\"rows\":" + zjbcdJson + "}";
        }

    }

    @Transactional
    public String findZjpcdList(Long gysId, Long sbgsId, Long sbbmId) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        Page zjpcdPage = this.zjbcdDao.findZjpcdList(gysId, sbgsId, sbbmId);
//        List<Map> sumList = this.zjbcdDao.findSumZjbcd(gysId, sbgsId, sbbmId);
        String zjbcdJson = gson.toJson(zjpcdPage.getResult());
//        Double je = 0d;
//        if (sumList.size() != 0) {
//            return "{\"total\":" + zjpcdPage.getTotalCount() + ",\"rows\":" + zjbcdJson + ",\"footer\":[{\"lb.z\":\"合计:\",\"je\":" + je + " }]}";
//        } else {
        return "{\"total\":" + zjpcdPage.getTotalCount() + ",\"rows\":" + zjbcdJson + "}";
//        }
    }

    @Transactional
    public String findZjbcdSearchWl(Long wljsdId, int pageNo, int pageSize) {
        Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
        Page zjbcdPage = this.zjbcdDao.findZjbcdSearchWl(wljsdId, pageNo, pageSize);
        String zjbcdJson = gson.toJson(zjbcdPage.getResult());
        return "{\"total\":" + zjbcdPage.getTotalCount() + ",\"rows\":" + zjbcdJson + "}";
    }

    @Transactional
    public Zjbcd findZjbcdDetailByProcessInstance(String processInstanceId) {
        return this.zjbcdDao.findUniqueByProperty("processInstanceId", processInstanceId);
    }

    @Transactional
    public Zjbcd findZjbcd(Long zjbcdId) {
        Zjbcd zjbcd = this.zjbcdDao.get(zjbcdId);
        return zjbcd;
    }

    @Transactional
    public void saveZjbcd(Zjbcd zjbcd) {
        this.zjbcdDao.save(zjbcd);
    }

    @Transactional
    public void useZjbcd(Long zjbcdId, Long khId) {
        Zjbcd zjbcd = this.zjbcdDao.get(zjbcdId);
        Kh kh = this.khDao.get(khId);

        Double je = zjbcd.getJe();
        Double sl = kh.getSl();


        Double kccb = kh.getWsdj() - (je / sl);
        java.text.DecimalFormat df = new java.text.DecimalFormat("#0.0000");
        String kccbStr = df.format(kccb);
        kccb = Double.parseDouble(kccbStr);

        ZjbcdRz zjbcdRz = new ZjbcdRz();
        zjbcdRz.setZjbcd(zjbcd);
        zjbcdRz.setKh(kh);
        zjbcdRz.setYkccb(kh.getWsdj());
        zjbcdRz.setXkccb(kccb);
        zjbcdRz.setDateCreated(new Date());
        zjbcdRz.setLastUpdated(zjbcdRz.getDateCreated());
        zjbcdRz.setCreateUser(YgService.getCurrentYg());
        zjbcdRz.setCreateOrgan(YgService.getCurrentYg().getZggs());
        zjbcdRz.setCreateDepartment(YgService.getCurrentYg().getZgjg());
        this.zjbcdRzDao.save(zjbcdRz);

        kh.setWsdj(kccb);
        this.khDao.save(kh);

        zjbcd.setZt("ysy");
        this.zjbcdDao.save(zjbcd);
    }

    @Autowired
    public void setZjbcdDao(ZjbcdDao zjbcdDao) {
        this.zjbcdDao = zjbcdDao;
    }

    @Autowired
    public void setZjbcdRzDao(ZjbcdRzDao zjbcdRzDao) {
        this.zjbcdRzDao = zjbcdRzDao;
    }

    @Autowired
    public void setKhDao(KhDao khDao) {
        this.khDao = khDao;
    }
}
